package com.example.demo.utils;

import java.time.Instant;
import java.util.Random;
import java.util.UUID;

public class IdUtils {
    private static final char[] CHAR_ARRAY = "abcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
    private static final Random random = new Random();

    /**
     * 生成 uuid
     * @return
     */
    public static String randomUUID() {
        return UUID.randomUUID().toString();
    }

    /**
     * 生成随机ID
     *
     * @param length ID的随机部分长度，默认为16
     * @param suffix 是否添加时间戳后缀，默认为true
     * @return 生成的ID字符串
     */
    public static String genId(int length, boolean suffix) {
        StringBuilder sb = new StringBuilder();

        // 生成随机字符串部分
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(CHAR_ARRAY.length);
            sb.append(CHAR_ARRAY[index]);
        }

        // 添加时间戳后缀
        if (suffix) {
            sb.append("_").append(Instant.now().toEpochMilli());
        }

        return sb.toString();
    }

    /**
     * 生成随机ID（使用默认参数）
     *
     * @return 生成的ID字符串（16位随机字符+时间戳）
     */
    public static String genId() {
        return genId(16, true);
    }

    /**
     * 生成随机ID（指定长度）
     *
     * @param length ID的随机部分长度
     * @return 生成的ID字符串（指定长度随机字符+时间戳）
     */
    public static String genId(int length) {
        return genId(length, true);
    }

    /**
     * 生成随机ID（指定是否添加后缀）
     *
     * @param suffix 是否添加时间戳后缀
     * @return 生成的ID字符串（16位随机字符，可选时间戳）
     */
    public static String genId(boolean suffix) {
        return genId(16, suffix);
    }
}
